package com.beantools.filters;

import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import java.util.Set;

/**
 * 这是一个实现Filters接口的抽象类，有三种数据过滤的方式
 * <ol>
 * <li>根据数组过对象/li>
 * <li>根据容器过滤独享/li>
 * <li>根据map过滤对象</li>
 * </ol>
 *
 * @author baoy
 * @version 1.0
 * @see com.beantools.filters.MethodFilters
 * @see com.beantools.filters.SignFilters
 * @see
 * @since 1.1.0
 */

public abstract class AbstractFilters<R, T> implements Filters<R, T>, Serializable {

    private static final long serialVersionUID = -8949230424815077677L;

    /**
     * 过滤的方法，其有一个泛型数组。返回的是set集合。
     * 就像一个沙漏一样，筛选掉不需要的对象，得到真正
     * 用于程序的对象。对象可能是泛型对象，也可能不是。
     *
     * @param ts   泛型数组
     * @param flag 按照什么方式过滤对象
     * @return set集合，如果ts为空，则返回空对象；如果没有
     * 得到过滤的数据，则返回长度为0的set集合；否则，返回set集合
     */
    @Override
    public Set<R> filter(T[] ts, String flag) {
        return null;
    }

    /**
     * 过滤的方法，其有一个泛型集合。返回的是set集合。
     * 就像一个沙漏一样，筛选掉不需要的对象，得到真正
     * 用于程序的对象。对象可能是泛型对象，也可能不是。
     *
     * @param collection 泛型容器
     * @param flag       按照什么方式过滤对象
     * @return set集合，如果ts为空，则返回空对象；如果没有
     * 得到过滤的数据，则返回长度为0的set集合；否则，返回set集合
     */
    @Override
    public Set<R> filter(Collection<T> collection, String flag) {
        return null;
    }

    /**
     * 过滤的方法，其有一个泛型Map。返回的是set集合。
     * 就像一个沙漏一样，筛选掉不需要的对象，得到真正
     * 用于程序的对象。对象可能是泛型对象，也可能不是。
     *
     * @param rMap map集合,R表示待过滤数组
     * @param flag 按照什么方式过滤对象
     * @return set集合，如果ts为空，则返回空对象；如果没有
     * 得到过滤的数据，则返回长度为0的set集合；否则，返回set集合
     */
    @Override
    public Set<R> filter(Map<Object, T> rMap, String flag) {
        return null;
    }

    /**
     * 过滤的方法，其中有一个object对象，初始化对象的数据。
     *
     * @param ts 泛型对象
     * @return
     */
    @Override
    public void initFilter(Object ts) {

    }

}
